/*
 * DistanceSensorManager - 距离传感器管理类
 * 功能：提供超声波距离传感器的基本控制，包括初始化、距离测量等功能
 */
#ifndef DISTANCE_SENSOR_MANAGER_H
#define DISTANCE_SENSOR_MANAGER_H

#include <Arduino.h>
#include <NHCSR04.h>
#include <functional>

// 距离传感器状态枚举
enum DistanceSensorStatus {
  DISTANCE_SENSOR_IDLE = 0,    // 空闲状态
  DISTANCE_SENSOR_READY,       // 就绪状态
  DISTANCE_SENSOR_ERROR        // 错误状态
};

class DistanceSensorManager {
private:
  SR04 _sensor;                // 传感器实例
  int _triggerPin;             // 触发引脚
  int _echoPin;                // 回波引脚
  int _maxDistance;            // 最大测量距离（厘米）
  double _lastDistance;        // 上次测量的距离
  DistanceSensorStatus _status;// 当前状态
  unsigned long _measureInterval; // 测量间隔（毫秒）
  unsigned long _lastMeasureTime;  // 上次测量时间
  bool _isEnabled;             // 是否启用传感器
  
  // 距离变化回调
  std::function<void(double)> _onDistanceChanged;

public:
  // 构造函数
  DistanceSensorManager(int triggerPin, int echoPin, int maxDistance = 1200);
  
  // 初始化传感器
  void begin();
  
  // 循环处理函数
  void loop();
  
  // 获取当前距离（厘米）
  double getDistance() const;
  
  // 单次测量距离
  double measureDistance();
  
  // 获取传感器状态
  DistanceSensorStatus getStatus() const;
  
  // 启用/禁用传感器
  void setEnabled(bool enabled);
  
  // 检查传感器是否启用
  bool isEnabled() const;
  
  // 设置测量间隔（毫秒）
  void setMeasureInterval(unsigned long interval);
  
  // 设置距离变化回调函数
  void setOnDistanceChanged(std::function<void(double)> callback);
};

#endif // DISTANCE_SENSOR_MANAGER_H